Changeset 4065 for trunk/LMDZ.COMMON/libf/evolution/info.F90
- Timestamp:
- Feb 12, 2026, 9:09:12 AM (2 weeks ago)
- File:
-
- 1 moved
-
trunk/LMDZ.COMMON/libf/evolution/info.F90 (moved) (moved from trunk/LMDZ.COMMON/libf/evolution/info_pem.F90) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/evolution/info.F90
r4064 r4065 1 MODULE info _pem1 MODULE info 2 2 !----------------------------------------------------------------------- 3 3 ! NAME 4 ! info _pem4 ! info 5 5 ! 6 6 ! DESCRIPTION 7 ! Handles counters for PCM/PEM coupled runs and simulation metadata. 7 ! Handles counters for PCM/PEM coupled runs and duration information 8 ! of the simulation metadata. 8 9 ! 9 10 ! AUTHORS & DATE 10 ! R. Vandemeulebrouck11 11 ! JB Clement, 2023-2025 12 12 ! … … 15 15 !----------------------------------------------------------------------- 16 16 17 ! DEPENDENCIES 18 ! ------------ 19 use numerics, only: dp, di, k4 20 17 21 ! DECLARATION 18 22 ! ----------- 19 23 implicit none 20 24 21 ! MODULE VARIABLES 22 ! ---------------- 23 integer :: iPCM, iPEM, nPCM, nPCM_ini ! Data about the chained simulation of PCM/PEM runs 25 ! PARAMETERS 26 ! ---------- 27 character(14), parameter :: infofile_name = 'launchPEM.info' 28 29 ! VARIABLES 30 ! --------- 31 integer(di) :: iPCM, iPEM, nPCM, nPCM_ini ! Data about the chained simulation of PCM/PEM runs 24 32 25 33 contains … … 27 35 28 36 !======================================================================= 29 SUBROUTINE update_info(i_myear_leg,stopPEM,i_myear,nyears_tot) 37 SUBROUTINE read_info() 38 !----------------------------------------------------------------------- 39 ! NAME 40 ! read_info 41 ! 42 ! DESCRIPTION 43 ! Read the file "launchPEM.info" to get the number of simulated 44 ! years. 45 ! 46 ! AUTHORS & DATE 47 ! JB Clement, 12/2025 48 ! 49 ! NOTES 50 ! 51 !----------------------------------------------------------------------- 52 53 ! DEPENDENCIES 54 ! ------------ 55 use stoppage, only: stop_clean 56 use evolution, only: n_yr_sim, nmax_yr_sim, set_r_plnt2earth_yr 57 use display, only: print_msg 58 59 ! DECLARATION 60 ! ----------- 61 implicit none 62 63 ! LOCAL VARIABLES 64 ! --------------- 65 logical(k4) :: here 66 real(dp) :: tmp 67 integer(di) :: ierr, funit 68 69 ! CODE 70 ! ---- 71 inquire(file = infofile_name,exist = here) 72 if (.not. here) call stop_clean(__FILE__,__LINE__,'cannot find required file "'//infofile_name//'"! It should be created by the launching script.',1) 73 call print_msg('> Reading "'//infofile_name//'"') 74 open(newunit = funit,file = infofile_name,status = 'old',form = 'formatted',action = 'read',iostat = ierr) 75 if (ierr /= 0) call stop_clean(__FILE__,__LINE__,'error opening file "'//infofile_name//'"!',ierr) 76 read(funit,*) n_yr_sim, nmax_yr_sim, tmp, iPCM, iPEM, nPCM, nPCM_ini 77 call set_r_plnt2earth_yr(tmp) 78 close(funit) 79 80 END SUBROUTINE read_info 81 !======================================================================= 82 83 !======================================================================= 84 SUBROUTINE update_info(n_yr_run,stopPEM,n_yr_sim,nmax_yr_sim) 30 85 !----------------------------------------------------------------------- 31 86 ! NAME … … 34 89 ! DESCRIPTION 35 90 ! Update the first line of "launchPEM.info" to count the number of 36 ! simulated Martian years. Write in "launchPEM.info" the reason why37 ! the PEMstopped and the number of simulated years.91 ! simulated years. Write in "launchPEM.info" the reason why the PEM 92 ! stopped and the number of simulated years. 38 93 ! 39 94 ! AUTHORS & DATE … … 47 102 ! DEPENDENCIES 48 103 ! ------------ 49 use evolution, only: convert_years, year_bp_ini 104 use evolution, only: r_plnt2earth_yr, pem_ini_date 105 use utility, only: int2str, nb_digits 106 use stoppage, only: stop_clean 107 use display, only: print_msg 50 108 51 109 ! DECLARATION … … 55 113 ! ARGUMENTS 56 114 ! --------- 57 integer , intent(in) :: stopPEM! Reason to stop58 real , intent(in) :: i_myear_leg! # of years59 real , intent(in) :: i_myear ! Current simulated Martianyear60 real , intent(in) :: nyears_tot ! Maximum number of Martianyears to be simulated115 integer(di), intent(in) :: stopPEM ! Reason to stop 116 real(dp), intent(in) :: n_yr_run ! # of years 117 real(dp), intent(in) :: n_yr_sim ! Current simulated year 118 real(dp), intent(in) :: nmax_yr_sim ! Maximum number of years to be simulated 61 119 62 120 ! LOCAL VARIABLES 63 121 ! --------------- 64 logical :: ok65 integer :: cstat122 logical(k4) :: here 123 integer(di) :: cstat, ierr, funit 66 124 character(20) :: fch1, fch2, fch3 67 125 68 126 ! CODE 69 127 ! ---- 70 inquire(file = 'launchPEM.info',exist = ok) 71 if (ok) then 72 write(fch1,'(f'//int2str(nb_digits(i_myear) + 5)//'.4)') i_myear 73 write(fch2,'(f'//int2str(nb_digits(nyears_tot) + 5)//'.4)') nyears_tot 74 write(fch3,'(f6.4)') convert_years ! 4 digits to the right of the decimal point to respect the precision of Martian year in "launch_pem.sh" 75 call execute_command_line('sed -i "1s/.*/'//trim(fch1)//' '//trim(fch2)//' '//trim(fch3)//' '//int2str(iPCM)//' '//int2str(iPEM + 1)//' '//int2str(nPCM)//' '//int2str(nPCM_ini)//'/" launchPEM.info',cmdstat = cstat) 76 if (cstat > 0) then 77 error stop 'update_info: command execution failed!' 78 else if (cstat < 0) then 79 error stop 'update_info: command execution not supported!' 80 endif 81 open(1,file = 'launchPEM.info',status = "old",position = "append",action = "write") 82 ! Martian date, Number of Martians years done by the PEM run, Number of Martians years done by the chainded simulation, Code of the stopping criterion 83 ! The conversion ratio from Planetary years to Earth years is given in the header of the file 84 write(1,'(f20.4,f20.4,f20.4,i20)') year_bp_ini + i_myear, i_myear_leg, i_myear, stopPEM 85 close(1) 86 else 87 error stop 'The file ''launchPEM.info'' does not exist and cannot be updated!' 88 endif 128 call print_msg('> Updating "'//infofile_name//'"') 129 inquire(file = infofile_name,exist = here) 130 if (.not. here) call stop_clean(__FILE__,__LINE__,'cannot find required file "'//infofile_name//'"! It should be created by the launching script.',1) 131 132 ! Modify the header (first line) 133 write(fch1,'(f'//int2str(nb_digits(n_yr_sim) + 5)//'.4)') n_yr_sim 134 write(fch2,'(f'//int2str(nb_digits(nmax_yr_sim) + 5)//'.4)') nmax_yr_sim 135 write(fch3,'(f6.4)') r_plnt2earth_yr ! 4 digits to the right of the decimal point to respect the precision of year in "launch_pem.sh" 136 call execute_command_line('sed -i "1s/.*/'//trim(fch1)//' '//trim(fch2)//' '//trim(fch3)//' '//int2str(iPCM)//' '//int2str(iPEM + 1)//' '//int2str(nPCM)//' '//int2str(nPCM_ini)//'/" launchPEM.info',cmdstat = cstat) 137 if (cstat > 0) then 138 call stop_clean(__FILE__,__LINE__,'command execution failed!',1) 139 else if (cstat < 0) then 140 call stop_clean(__FILE__,__LINE__,'command execution not supported!',1) 141 end if 142 143 ! Add the information of current PEM run at the end of file 144 open(newunit = funit,file = infofile_name,status = "old",position = "append",action = "write",iostat = ierr) 145 if (ierr /= 0) call stop_clean(__FILE__,__LINE__,'error opening file "'//infofile_name//'"!',ierr) 146 ! Date, Number of years done by the PEM run, Number of years done by the chainded simulation, Code of the stopping criterion 147 write(funit,'(f20.4,f20.4,f20.4,i20)') pem_ini_date + n_yr_sim, n_yr_run, n_yr_sim, stopPEM 148 close(funit) 89 149 90 150 END SUBROUTINE update_info 91 151 !======================================================================= 92 152 93 !======================================================================= 94 FUNCTION int2str(i) RESULT(str) 95 !----------------------------------------------------------------------- 96 ! NAME 97 ! int2str 98 ! 99 ! DESCRIPTION 100 ! Convert an integer into a string. 101 ! 102 ! AUTHORS & DATE 103 ! JB Clement, 2023-2025 104 ! 105 ! NOTES 106 ! 107 !----------------------------------------------------------------------- 108 109 ! DECLARATION 110 ! ----------- 111 implicit none 112 113 ! ARGUMENTS 114 ! --------- 115 integer, intent(in) :: i 116 117 ! LOCAL VARIABLES 118 ! --------------- 119 character(20) :: str_tmp 120 character(:), allocatable :: str 121 122 ! CODE 123 ! ---- 124 if (nb_digits(real(i)) > len(str_tmp)) error stop 'int2str [info_pem]: invalid integer for conversion!' 125 write(str_tmp,'(i0)') i 126 str = trim(adjustl(str_tmp)) 127 128 END FUNCTION int2str 129 !======================================================================= 130 131 !======================================================================= 132 FUNCTION nb_digits(x) RESULT(idigits) 133 !----------------------------------------------------------------------- 134 ! NAME 135 ! nb_digits 136 ! 137 ! DESCRIPTION 138 ! Give the number of digits for the integer part of a real number. 139 ! 140 ! AUTHORS & DATE 141 ! JB Clement, 2023-2025 142 ! 143 ! NOTES 144 ! 145 !----------------------------------------------------------------------- 146 147 ! DECLARATION 148 ! ----------- 149 implicit none 150 151 ! ARGUMENTS 152 ! --------- 153 real, intent(in) :: x 154 155 ! LOCAL VARIABLES 156 ! --------------- 157 integer :: idigits 158 159 ! CODE 160 ! ---- 161 idigits = 1 162 ! If x /= 0 then: 163 if (abs(x) > 1.e-10) idigits = int(log10(abs(x))) + 1 164 165 END FUNCTION nb_digits 166 !======================================================================= 167 168 END MODULE info_pem 153 END MODULE info
Note: See TracChangeset
for help on using the changeset viewer.
