OpenMCTDHB v2.3

modulecreate_V_ext.F90

Go to the documentation of this file.
00001 ! vim:fdm=marker:
00002 
00003 !-------------------------------------------------------------------------------------------
00010 MODULE modulecreate_V_ext
00011 USE modulegrid
00012 IMPLICIT NONE
00013 
00014 
00015 CONTAINS
00016 
00017 
00018 !-------------------------------------------------------------------------------------------
00023 SUBROUTINE write_potentialToFile(NDX,NDY,NDZ,gridx,gridy,gridz,V_ext,filename)
00024 ! {{{ 
00025 IMPLICIT NONE
00026 INTEGER,INTENT(IN)        :: NDX,NDY,NDZ
00027 REAL*8,INTENT(IN)         :: V_ext(NDX*NDY*NDZ)
00028 REAL*8,INTENT(IN)         :: gridx(NDX),gridy(NDY),gridz(NDZ)
00029 CHARACTER(150),INTENT(IN) :: filename
00030 INTEGER                   :: outputunit,ierr
00031 INTEGER                   :: i,j,k
00032 REAL*8                    :: x,y,z
00033 
00034 outputunit      = 11
00035 ierr            = 0
00036 x               = 0.d0
00037 y               = 0.d0
00038 z               = 0.d0
00039 
00040 OPEN(UNIT=outputunit,FILE=filename,&
00041      FORM='formatted',ACTION='WRITE',STATUS='REPLACE',IOSTAT=ierr) 
00042 
00043   openif: IF (ierr == 0) THEN 
00044 
00045     writeloop: DO k=1,NDZ  
00046       DO j=1,NDY  
00047         DO i=1,NDX ! format: x,y,z, V(x,y,z)   
00048           x=gridx(i) 
00049           y=gridy(j) 
00050           z=gridz(k) 
00051           WRITE(outputunit,*)x,y,z,V_ext(i+NDX*(j-1)+NDX*NDY*(k-1)) 
00052 
00053         END DO
00054       END DO
00055     END DO writeloop
00056 
00057   ELSE openif
00058     WRITE(*,1040) ierr
00059     1040 FORMAT (' ','Error opening file: IOSTAT = ', I6)
00060   END IF openif
00061 
00062 CLOSE(outputunit)
00063 
00064 
00065 !       }}}
00066 END SUBROUTINE write_potentialToFile 
00067 
00068 
00069 !-------------------------------------------------------------------------------------------
00075 SUBROUTINE get_bjjLetterPotential(NDX,NDY,NDZ,gridx,gridy,gridz,Dims,V_ext) 
00076 !--- {{{
00077 IMPLICIT NONE
00078 
00079 INTEGER,INTENT(IN)      :: NDX,NDY,NDZ,Dims
00080 REAL*8,INTENT(IN)       :: gridx(NDX),gridy(NDY),gridz(NDZ)
00081 REAL*8,INTENT(OUT)      :: V_ext(NDX*NDY*NDZ)
00082 REAL*8                  :: x,y,z
00083 REAL*8                  :: x0,xs,a,s0,s2,s3 !for a spline
00084 
00085 INTEGER               :: i,j,k,m,n
00086 
00087 ! this defines a cubic (natural) spline that connects at
00088 ! +-xs to harmonic potentials a(x+-x0)**2. Used in the PRL of Sakmann et al. (2009).
00089 x0 = -2.0d0
00090 xs = -0.5d0 
00091 a  = 0.5d0
00092 
00093 ! for the spline
00094 s0 = 1.d0/3.d0 * (3.d0*a*x0**2 - 2*a*x0*xs)
00095 s2 = (-2.d0*a*x0+a*xs)/xs
00096 s3 = 2.d0/3.d0 * a*x0/xs**2
00097 
00098 DO m=1,NDX*NDY*NDZ
00099 
00100   CALL get_ijk_from_m(m,NDX,NDY,i,j,k)
00101   x=gridx(i)
00102   y=gridy(j)
00103   z=gridz(k)
00104   
00105   IF (x< xs) THEN
00106     V_ext(m)=a*(x-x0)**2
00107   ELSE IF ((x >= xs) .and. (x<=0.d0)) THEN
00108     V_ext(m)=s0 + s2 * x**2 + s3 * x**3
00109   ELSE IF ((x > 0.d0) .and. (x<=-xs)) THEN
00110     V_ext(m)=s0 + s2 * (-x)**2 + s3 * (-x)**3
00111   ELSE IF ((x > -xs)) THEN
00112     V_ext(m)=a*(x+x0)**2
00113   END IF   
00114 
00115 END DO
00116 
00117 !---}}}
00118 END SUBROUTINE get_bjjLetterPotential
00119 
00120 !----------------------------------------------------------------------------------------------
00127 SUBROUTINE get_harmonicPotential(NDX,NDY,NDZ,gridx,gridy,gridz,x0,y0,z0,w_x,w_y,w_z,V_ext) 
00128 !--- {{{
00129 IMPLICIT NONE
00130 
00131 INTEGER,INTENT(IN)      :: NDX,NDY,NDZ
00132 REAL*8,INTENT(IN)       :: gridx(NDX),gridy(NDY),gridz(NDZ),x0,y0,z0,w_x,w_y,w_z
00133 REAL*8,INTENT(OUT)      :: V_ext(NDX*NDY*NDZ)
00134 REAL*8                  :: x,y,z
00135 
00136 INTEGER               :: i,j,k,m
00137 
00138 DO m=1,NDX*NDY*NDZ
00139 
00140   CALL get_ijk_from_m(m,NDX,NDY,i,j,k)
00141   x=gridx(i)
00142   y=gridy(j)
00143   z=gridz(k)
00144   
00145   V_ext(m) = 0.5d0 *( w_x**2 * (x-x0)**2 + w_y**2 * (y-y0)**2 + w_z**2 * (z-z0)**2 )  
00146 
00147 END DO
00148 
00149 !---}}}
00150 END SUBROUTINE get_harmonicPotential
00151 
00152 
00153 
00154 
00155 END MODULE modulecreate_V_ext
 All Namespaces Files Functions Variables