| MODULE mod_Tnum |
| USE mod_system |
| USE mod_dnSVM |
| IMPLICIT NONE |
| TYPE Type_BFTransfo |
| !---------------------------------------------------------------- |
| logical :: init0,notinit0 |
| logical :: allo ! If allocated => T |
| |
| integer :: nb_vect,nb_BF |
| integer :: nb_var,nb_var_Rot |
| integer :: num_Frame |
| character (len=Name_len) :: name_Frame |
| |
| logical :: Frame |
| |
| integer, pointer :: type_Q(:) |
| character (len=Name_len), pointer :: name_Q(:) |
| |
| |
| |
| TYPE (Type_BFTransfo), pointer :: tab_BFTransfo(:) ! dim: nb_vect or nb_BF |
| |
| END TYPE Type_BFTransfo |
| CONTAINS |
| c======================================================================= |
| c |
| c Read BF transfo: BF and vectors |
| c |
| c======================================================================= |
| SUBROUTINE init0_BFTransfo(BFTransfo) |
| TYPE (Type_BFTransfo),intent(out) :: BFTransfo |
| |
| BFTransfo%init0 = .TRUE. |
| BFTransfo%notinit0 = .FALSE. |
| |
| BFTransfo%allo = .FALSE. |
| |
| BFTransfo%nb_vect = 0 |
| BFTransfo%nb_BF = 0 |
| BFTransfo%nb_var = 0 |
| BFTransfo%nb_var_Rot = 0 |
| BFTransfo%num_Frame = 0 |
| BFTransfo%name_Frame = "F0" |
| |
| BFTransfo%Frame = .FALSE. |
| |
| nullify(BFTransfo%type_Q) |
| nullify(BFTransfo%name_Q) |
| nullify(BFTransfo%tab_BFTransfo) |
| |
| END SUBROUTINE init0_BFTransfo |
| SUBROUTINE check_init0_BFTransfo(A,name_A,name_sub) |
| TYPE (Type_BFTransfo), intent(in) :: A |
| character (len=*), intent(in) :: name_A |
| character (len=*), intent(in) :: name_sub |
| |
| IF ( (A%init0 .EQV. A%notinit0) .OR. |
| * (A%notinit0 .AND. .NOT. A%init0) ) THEN |
| write(6,*) ' ERROR in ',name_sub |
| write(6,*) name_A, |
| * ' has NOT been initiated with "init0_BFTransfo"' |
| write(6,*) ' CHECK the source!!!!!' |
| write(6,*) '.%init0, %notinit0',A%init0,A%notinit0 |
| STOP |
| END IF |
| END SUBROUTINE check_init0_BFTransfo |
| RECURSIVE SUBROUTINE dealloc_BFTransfo(BFTransfo) |
| TYPE (Type_BFTransfo),intent(inout) :: BFTransfo |
| |
| integer :: iv |
| character (len=*), parameter :: name_sub='dealloc_BFTransfo' |
| |
| IF (.NOT. BFTransfo%Frame) RETURN |
| write(6,*) 'BEGINNING ',name_sub |
| |
| CALL check_init0_BFTransfo(BFTransfo,'BFTransfo',name_sub) |
| |
| deallocate(BFTransfo%type_Q) |
| deallocate(BFTransfo%name_Q) |
| |
| DO iv=1,BFTransfo%nb_vect |
| CALL dealloc_BFTransfo(BFTransfo%tab_BFTransfo(iv)) |
| END DO |
| |
| deallocate(BFTransfo%tab_BFTransfo) |
| |
| BFTransfo%allo = .FALSE. |
| CALL init0_BFTransfo(BFTransfo) |
| |
| write(6,*) 'END ',name_sub |
| |
| END SUBROUTINE dealloc_BFTransfo |
| ! SUBROUTINE Read_BFTransfo(BFTransfo,Qtransfo,i_Q, |
| ! * in_unitp,out_unitp) |
| RECURSIVE SUBROUTINE Read_BFTransfo(BFTransfo,Qtransfo,i_Q, |
| * in_unitp,out_unitp) |
| TYPE (Type_BFTransfo),intent(inout) :: BFTransfo |
| TYPE (Type_Qtransfo), intent(inout) :: Qtransfo |
| integer, intent(inout) :: i_Q |
| integer :: in_unitp,out_unitp |
| |
| |
| integer :: nb_vect,nb_var,iq,iv |
| logical :: Frame,cos_th,cart |
| character (len=Name_len) :: name_d,name_th,name_dih, |
| * name_x,name_y,name_z |
| character (len=Name_len) :: name_F,name_v |
| |
| NAMELIST /BF/ nb_vect |
| NAMELIST /vector/ Frame,cos_th,name_d,name_th,name_dih, |
| * cart,name_x,name_y,name_z |
| |
| character (len=*), parameter :: name_sub='Read_BFTransfo' |
| |
| |
| IF (.NOT. BFTransfo%Frame) RETURN |
| c write(6,*) 'BEGINNING ',name_sub |
| |
| CALL check_init0_BFTransfo(BFTransfo,'BFTransfo',name_sub) |
| |
| nb_vect = 0 |
| |
| read(in_unitp,BF) |
| c write(out_unitp,BF) |
| |
| IF (nb_vect < 1) THEN |
| write(out_unitp,*) ' ERROR in ',name_sub |
| write(out_unitp,*) ' the number of vector is < 1',nb_vect |
| STOP |
| END IF |
| BFTransfo%nb_vect = nb_vect |
| nb_var = max(1,3*nb_vect-3) |
| IF (BFTransfo%num_Frame > 0) THEN |
| nb_var = nb_var + 2 |
| IF (nb_vect > 1) nb_var = nb_var + 1 |
| END IF |
| BFTransfo%nb_var = nb_var |
| |
| allocate(BFTransfo%type_Q(nb_var)) |
| allocate(BFTransfo%name_Q(nb_var)) |
| |
| allocate(BFTransfo%tab_BFTransfo(nb_vect)) |
| BFTransfo%allo = .TRUE. |
| |
| write(name_F,*) BFTransfo%num_Frame |
| name_F = "F" // trim(adjustl(name_F)) |
| IF (BFTransfo%num_Frame > 0) name_F = |
| * trim(adjustl(name_F)) // trim(adjustl(BFTransfo%name_Frame)) |
| |
| BFTransfo%name_Frame = name_F |
| |
| c write(6,*) 'num_Frame,name_Frame', |
| c * BFTransfo%num_Frame,BFTransfo%name_Frame |
| |
| iq = 0 |
| DO iv=1,nb_vect |
| Frame = .FALSE. |
| cos_th = .TRUE. |
| cart = .FALSE. |
| write(name_v,*) iv |
| name_v = trim(adjustl(name_v)) // "_" // trim(adjustl(name_F)) |
| name_x = "x" // trim(adjustl(name_v)) |
| name_y = "y" // trim(adjustl(name_v)) |
| name_z = "z" // trim(adjustl(name_v)) |
| name_d = "d" // trim(adjustl(name_v)) |
| name_th ="th" // trim(adjustl(name_v)) |
| name_dih="dih" // trim(adjustl(name_v)) |
| read(in_unitp,vector) |
| c write(out_unitp,vector) |
| |
| CALL init0_BFTransfo(BFTransfo%tab_BFTransfo(iv)) |
| BFTransfo%tab_BFTransfo(iv)%num_Frame = iv |
| BFTransfo%tab_BFTransfo(iv)%Frame = Frame |
| BFTransfo%tab_BFTransfo(iv)%name_Frame = name_F |
| IF (cart .AND. iv < 3) THEN |
| write(out_unitp,*) ' ERROR in ',name_sub |
| write(out_unitp,*) ' vector in cartesian and iv < 3', |
| * ' is not possible' |
| write(out_unitp,*) 'cart,iv',cart,iv |
| STOP |
| END IF |
| IF (cart) THEN |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 1 ! cart :x |
| BFTransfo%name_Q(iq) = name_x |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 1 ! cart :y |
| BFTransfo%name_Q(iq) = name_y |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 1 ! cart :z |
| BFTransfo%name_Q(iq) = name_z |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| ELSE |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 2 ! distance |
| BFTransfo%name_Q(iq) = name_d |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| IF (iv > 1) THEN |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 3 ! th |
| IF (cos_th) BFTransfo%type_Q(iq) = -3 ! cos(th) |
| BFTransfo%name_Q(iq) = name_th |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| END IF |
| IF (iv > 2) THEN |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 4 ! dih |
| BFTransfo%name_Q(iq) = name_dih |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| END IF |
| END IF |
| |
| |
| CALL Read_BFTransfo(BFTransfo%tab_BFTransfo(iv),Qtransfo,i_Q, |
| * in_unitp,out_unitp) |
| END DO |
| |
| IF (BFTransfo%num_Frame > 0) THEN |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 4 |
| BFTransfo%name_Q(iq) = "alpha_" // trim(adjustl(name_F)) |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 3 |
| IF (cos_th) BFTransfo%type_Q(iq) = -3 |
| BFTransfo%name_Q(iq) = "beta_" // trim(adjustl(name_F)) |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| IF (nb_vect > 1) THEN |
| iq = iq + 1 |
| BFTransfo%type_Q(iq) = 4 |
| BFTransfo%name_Q(iq) = "gamma_" // trim(adjustl(name_F)) |
| i_Q = i_Q + 1 |
| Qtransfo%type_Q(i_Q) = BFTransfo%type_Q(iq) |
| Qtransfo%name_Q(i_Q) = BFTransfo%name_Q(iq) |
| END IF |
| END IF |
| |
| |
| c write(out_unitp,*) 'END ',name_sub |
| |
| END SUBROUTINE Read_BFTransfo |
| !SUBROUTINE Write_BFTransfo(BFTransfo,out_unitp) |
| RECURSIVE SUBROUTINE Write_BFTransfo(BFTransfo,out_unitp) |
| |
| TYPE (Type_BFTransfo),intent(out) :: BFTransfo |
| |
| integer :: out_unitp |
| |
| integer :: iv,iq |
| character (len=*), parameter :: name_sub='Write_BFTransfo' |
| |
| IF (.NOT. BFTransfo%Frame) RETURN |
| write(out_unitp,*) 'BEGINNING ',name_sub |
| |
| CALL check_init0_BFTransfo(BFTransfo,'BFTransfo',name_sub) |
| |
| write(out_unitp,*) 'allo',BFTransfo%allo |
| write(out_unitp,*) 'num_Frame',BFTransfo%num_Frame |
| write(out_unitp,*) 'name_Frame: ',BFTransfo%name_Frame |
| |
| write(out_unitp,*) 'nb_vect,nb_BF', |
| * BFTransfo%nb_vect,BFTransfo%nb_BF |
| |
| write(out_unitp,*) 'nb_var,nb_var_Rot', |
| * BFTransfo%nb_var,BFTransfo%nb_var_Rot |
| |
| write(out_unitp,*) 'BF',BFTransfo%Frame |
| |
| |
| write(out_unitp,*) 'type_Q',BFTransfo%type_Q(:) |
| write(out_unitp,*) 'name_Q: ', |
| * (trim(BFTransfo%name_Q(iq))," ",iq=1,BFTransfo%nb_var) |
| |
| IF (BFTransfo%Frame) THEN |
| DO iv=1,BFTransfo%nb_vect |
| CALL Write_BFTransfo(BFTransfo%tab_BFTransfo(iv),out_unitp) |
| END DO |
| END IF |
| |
| write(6,*) 'END ',name_sub |
| |
| END SUBROUTINE Write_BFTransfo |
| END MODULE mod_Tnum |