mirror of
https://github.com/nwchemgit/nwchem.git
synced 2026-07-28 22:25:48 -04:00
Working version of interface with Venus. Many mods involved.
This commit is contained in:
parent
92fa715dd5
commit
b3f6eeca0a
1 changed files with 129 additions and 35 deletions
|
|
@ -1,10 +1,10 @@
|
|||
C
|
||||
C $Id: geninterface.F,v 1.2 2003-04-18 22:27:17 windus Exp $
|
||||
C $Id: geninterface.F,v 1.3 2003-06-20 23:53:30 yuri Exp $
|
||||
C
|
||||
C This is a first attempt at an interface code for Venus written in F77.
|
||||
C
|
||||
Subroutine initialize_qm(theory, basis, natom,
|
||||
$ coordinates, labels)
|
||||
$ coordinates, labels, charge, printName)
|
||||
|
||||
implicit none
|
||||
|
||||
|
|
@ -18,22 +18,27 @@ C
|
|||
|
||||
character*256 theory
|
||||
character*256 basis
|
||||
integer natom
|
||||
integer natom,I3N
|
||||
double precision charge
|
||||
double precision coordinates (3*natom)
|
||||
character*16 labels(natom)
|
||||
character*256 printName
|
||||
character*(nw_max_path_len) input_filename, rtdb_name
|
||||
|
||||
integer stack, heap, global, i, j
|
||||
integer stack, heap, global, i
|
||||
logical overify, ohardfail, ostartup, ocontinue
|
||||
|
||||
logical setTheory, setBasisSet, setInitCoordinates
|
||||
external setTheory, setBasisSet, setInitCoordinates
|
||||
logical setTheory, setBasisSet, setInitCoordinates, setCharge
|
||||
external setTheory, setBasisSet, setInitCoordinates, setCharge
|
||||
|
||||
logical setPrint
|
||||
external setPrint
|
||||
|
||||
C Create parallel processes
|
||||
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
write (6,*) 'before theory init'
|
||||
c write (6,*) 'before theory init'
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
|
|
@ -44,7 +49,8 @@ C Create parallel processes
|
|||
call flush(6)
|
||||
call ga_brdcst(MT_DBL, coordinates, mdtob(3*natom), 0)
|
||||
write (6,*) 'after coordinates ', ga_nodeid()
|
||||
do i = 1,9
|
||||
I3N = 3*natom
|
||||
do i = 1,I3N
|
||||
write(6,*) coordinates(i), i, ga_nodeid()
|
||||
enddo
|
||||
call flush(6)
|
||||
|
|
@ -56,16 +62,14 @@ C Create parallel processes
|
|||
call flush(6)
|
||||
call ga_brdcst(MT_INT, labels, 16*mitob(natom)/4, 0)
|
||||
write (6,*) 'after labels ', ga_nodeid()
|
||||
write(6,*) labels(1), labels(2), labels(3)
|
||||
write(6,*) labels(1), labels(2), labels(3),labels(4)
|
||||
* ,labels(5),labels(6)
|
||||
call flush(6)
|
||||
call ga_brdcst(MT_INT,printName, 256/4, 0)
|
||||
! write (6,*) 'after printName',printName, ga_nodeid()
|
||||
! call flush(6)
|
||||
|
||||
numatoms = natom
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
write (6,*) 'natom=',natom, ga_nodeid()
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
C Worry about input file. For now use a dummy one. Do I need to open it?
|
||||
|
||||
input_filename = "junk.nw"
|
||||
|
|
@ -85,9 +89,12 @@ c endif
|
|||
C Set up memory environment
|
||||
|
||||
! call input_mem_size(stack, heap, global, overify, ohardfail)
|
||||
stack = 6553600
|
||||
heap = 6553600
|
||||
global = 13107200
|
||||
! stack = 6553600
|
||||
! heap = 6553600
|
||||
! global = 13107200
|
||||
stack = 6553587
|
||||
heap = 19660794
|
||||
global = 26214404
|
||||
overify = .true.
|
||||
ohardfail = .true.
|
||||
write (6,*) 'stack=',stack,' heap=',heap,' global=',global,
|
||||
|
|
@ -118,6 +125,17 @@ C Need to get the input file name and the rtdb_name taken care of
|
|||
call util_file_info_rtdb(rtdb)
|
||||
call geom_hnd_parallel(.true.)
|
||||
|
||||
C Process number of scf iterations
|
||||
|
||||
if (.not. rtdb_put(rtdb, 'scf:maxiter', mt_int, 1, 200))
|
||||
$ call errquit('scf-input: rtdb_put failed', 0)
|
||||
|
||||
C Process number of dft iterations
|
||||
|
||||
if (.not. rtdb_put(rtdb, 'dft:iterations',
|
||||
& mt_int, 1, 200))
|
||||
& call errquit('dft_rdinput: rtdb_put failed', 101)
|
||||
|
||||
C Process theory type and put into rtdb
|
||||
|
||||
if (.not. setTheory(theory))
|
||||
|
|
@ -128,6 +146,11 @@ C Process basis type and put into rtdb
|
|||
if (.not. setBasisSet(basis))
|
||||
$ call errquit('initialize_qm: setBasisSet failed', 555)
|
||||
|
||||
C Process charge and put into rtdb
|
||||
|
||||
if (.not. setCharge(charge))
|
||||
$ call errquit('initialize_qm: setCharge failed', 555)
|
||||
|
||||
C Process molecule input and put into rtdb
|
||||
|
||||
if (.not. setInitCoordinates(coordinates,labels,natom))
|
||||
|
|
@ -135,7 +158,7 @@ C Process molecule input and put into rtdb
|
|||
$ ('initialize_qm:setInitCoordinates failed',555)
|
||||
|
||||
c initialize_qm = .true.
|
||||
|
||||
write(6,*)'Initalize called'
|
||||
return
|
||||
end
|
||||
C
|
||||
|
|
@ -189,7 +212,7 @@ C
|
|||
setBasisSet = .false.
|
||||
|
||||
temp_basis = basisSet(1:inp_strlen(basisSet))
|
||||
|
||||
write(6,*)'basis in setbasis set function',temp_basis
|
||||
write(basisSet, '(''basis; * library '',a,'' ; end'')')
|
||||
$ temp_basis(1:inp_strlen(temp_basis))
|
||||
|
||||
|
|
@ -232,8 +255,15 @@ C
|
|||
character*12 units
|
||||
double precision scale
|
||||
double precision coords(*)
|
||||
integer i
|
||||
|
||||
setCoordinates = .false.
|
||||
!
|
||||
c write (6,*) 'Before conversion'
|
||||
c do i = 1,9
|
||||
c write(6,*) coords(i), i
|
||||
c enddo
|
||||
!
|
||||
|
||||
if (.not.geom_create(geom,'geometry'))
|
||||
$ call errquit('setCoordinates: geom_create failed',555)
|
||||
|
|
@ -249,9 +279,19 @@ C
|
|||
$ call errquit
|
||||
$ ('setInitCoordinates:: failed getting user scale',0)
|
||||
|
||||
write(6,*) 'numatoms is in setCoordinates', numatoms
|
||||
call flush(6)
|
||||
if (scale.ne.1.0d0)
|
||||
$ call dscal(3*numatoms, scale, coords, 1)
|
||||
|
||||
!
|
||||
c write (6,*) 'After conversion'
|
||||
c do i = 1,9
|
||||
c write(6,*) coords(i), i
|
||||
! Pratima changed from write(6,*) coordinates(i), i
|
||||
c enddo
|
||||
!
|
||||
|
||||
if (.not.geom_cart_coords_set(geom,coords))
|
||||
$ call errquit
|
||||
$ ('setCoordinates: geom_cart_coords_set failed',555)
|
||||
|
|
@ -262,6 +302,8 @@ C
|
|||
if (.not.geom_destroy(geom))
|
||||
$ call errquit('setCoordinates: geom_destroy failed',555)
|
||||
|
||||
write(6,*) 'numatoms at end of setCoordinates', numatoms
|
||||
call flush(6)
|
||||
setCoordinates = .true.
|
||||
|
||||
return
|
||||
|
|
@ -276,7 +318,7 @@ C
|
|||
#include "geom.fh"
|
||||
#include "rtdb.fh"
|
||||
|
||||
integer natoms, geom, atn, i
|
||||
integer natoms, geom, atn, i, j
|
||||
double precision coordinates(3,natoms)
|
||||
character*16 labels(natoms), element
|
||||
character*2 symbol
|
||||
|
|
@ -287,6 +329,15 @@ C
|
|||
|
||||
setInitCoordinates = .false.
|
||||
|
||||
!
|
||||
c write (6,*) 'Before conversion'
|
||||
c do i = 1,3
|
||||
c do j = 1,3
|
||||
c write(6,*) coordinates(i,j), i,j
|
||||
c end do
|
||||
c enddo
|
||||
!
|
||||
|
||||
if (.not.geom_create(geom,'geometry'))
|
||||
$ call errquit('setCoordinates: geom_create failed',555)
|
||||
if (.not. geom_set_user_units(geom,'angstroms'))
|
||||
|
|
@ -325,6 +376,20 @@ C Map labels to atoms and charges
|
|||
|
||||
if (scale.ne.1.0d0)
|
||||
$ call dscal(3*natoms, scale, coordinates, 1)
|
||||
!
|
||||
! write (6,*) 'After conversion'
|
||||
! do i = 1,9
|
||||
! write(6,*) coordinates(i), i
|
||||
! enddo
|
||||
!
|
||||
! Pratima changed the above code
|
||||
|
||||
c write (6,*) 'After conversion in INIT '
|
||||
c do i = 1,3
|
||||
c do j = 1,3
|
||||
c write(6,*) coordinates(i,j), i,j
|
||||
c end do
|
||||
c enddo
|
||||
|
||||
if (.not.geom_cart_set(geom,natoms,labels,coordinates,charges))
|
||||
$ call errquit
|
||||
|
|
@ -368,10 +433,10 @@ C
|
|||
|
||||
call flush(6)
|
||||
call ga_brdcst(MT_DBL, coords, mdtob(3*numatoms), 0)
|
||||
write (6,*) 'after coords ', ga_nodeid()
|
||||
do i = 1,9
|
||||
write(6,*) coords(i), i, ga_nodeid()
|
||||
enddo
|
||||
c write (6,*) 'after coords ', ga_nodeid()
|
||||
c do i = 1,9
|
||||
c write(6,*) coords(i), i, ga_nodeid()
|
||||
c enddo
|
||||
call flush(6)
|
||||
|
||||
if (.not.setCoordinates(coords))
|
||||
|
|
@ -401,28 +466,29 @@ C
|
|||
#include "util.fh"
|
||||
#include "tcgmsg.fh"
|
||||
|
||||
double precision coords(*), gradient(*)
|
||||
double precision coords(3*numatoms), gradient(3*numatoms)
|
||||
integer i
|
||||
|
||||
external setCoordinates, task_gradient
|
||||
logical setCoordinates, task_gradient
|
||||
external task_energy
|
||||
logical task_energy
|
||||
|
||||
evaluateGradient = .false.
|
||||
|
||||
call flush(6)
|
||||
call ga_brdcst(MT_DBL, coords, mdtob(3*numatoms), 0)
|
||||
write (6,*) 'after coords ', ga_nodeid()
|
||||
do i = 1,9
|
||||
write(6,*) coords(i), i, ga_nodeid()
|
||||
enddo
|
||||
call flush(6)
|
||||
|
||||
if (.not.setCoordinates(coords))
|
||||
$ call errquit('evaluateGradient: setCoordinates failed',555)
|
||||
|
||||
if (.not.task_energy(rtdb))
|
||||
$ call errquit('evaluateGradient:task_gradient failed',555)
|
||||
if (.not.task_gradient(rtdb))
|
||||
$ call errquit('evaluateGradient:task_gradient failed',555)
|
||||
|
||||
C if (.not.rtdb_print(rtdb, .true.))
|
||||
C $ call errquit('evaluateGradient:rtdb_print failed',555)
|
||||
C
|
||||
if (.not.rtdb_get(rtdb, "task:gradient", mt_dbl, numatoms*3,
|
||||
$ gradient))
|
||||
$ call errquit('evaluateGradient:rtdb_get failed',555)
|
||||
|
|
@ -520,7 +586,7 @@ C Close the parallel environment
|
|||
C
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
write (6,*) 'myid=',myid,' before broadcast'
|
||||
c write (6,*) 'myid=',myid,' before broadcast'
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
|
|
@ -528,7 +594,7 @@ C
|
|||
call ga_brdcst(MT_INT, idop, mitob(1), 0)
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
write (6,*) 'myid=',myid,' after broadcast'
|
||||
c write (6,*) 'myid=',myid,' after broadcast'
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
call flush(6)
|
||||
|
|
@ -536,3 +602,31 @@ C
|
|||
return
|
||||
end
|
||||
|
||||
C
|
||||
C
|
||||
logical function setCharge(charge)
|
||||
|
||||
implicit none
|
||||
|
||||
#include "mafdecls.fh"
|
||||
#include "global.fh"
|
||||
#include "rtdb.fh"
|
||||
#include "tcgmsg.fh"
|
||||
#include "stdio.fh"
|
||||
#include "util.fh"
|
||||
#include "geninterface.fh"
|
||||
#include "inp.fh"
|
||||
|
||||
double precision charge
|
||||
|
||||
setCharge = .false.
|
||||
|
||||
if (.not. rtdb_put(rtdb, 'charge', MT_DBL, 1, charge))
|
||||
$ call errquit
|
||||
$ ('input_charge: failed to write to rtdb', 0)
|
||||
|
||||
setCharge = .true.
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue