00001
00002
00003
00004
00005
00006
00007
00008
00009 subroutine psmile_io_init_pelist (id_comp_id, comp_info, ierror )
00010
00011
00012 use PSMILe, dummy_interface => PSMILE_IO_Init_pelist
00013 implicit none
00014
00015
00016 integer, Intent (Out) :: ierror
00017
00018
00019 integer, Intent (In) :: id_comp_id
00020
00021 Type (Enddef_comp), Intent (In) :: comp_info
00022
00023
00024
00025
00026 integer, parameter :: nerrp=3
00027 integer :: ierrp(nerrp)
00028 integer :: act_size
00029 integer :: i
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 Character(len=len_cvs_string), save :: mycvs =
00049 '$Id: psmile_io_init_pelist.F90 2325 2010-04-21 15:00:07Z valcke $'
00050
00051 #ifdef VERBOSE
00052 print *, trim(ch_id), ': PSMILE_IO_Init_pelist : start', id_comp_id, nerrp
00053
00054 call psmile_flushstd
00055 #endif /* VERBOSE */
00056
00057
00058 ierror = 0
00059
00060 #ifdef __PSMILE_WITH_IO
00061 if ( Associated (Comps) ) then
00062 if ( .not. allocated(IO_Comps_infos)) &
00063 allocate(IO_Comps_infos(1:size(Comps)),STAT=ierror)
00064 print *, ' psmile_io_init_comp -1- : ierror = ', ierror
00065 call psmile_flushstd
00066 if(ierror.ne.0) then
00067 ierrp(1) = ierror
00068 ierrp(2) = size(Comps)
00069 call psmile_error ( ierror, 'Allocate IO_Comps_infos', &
00070 ierrp, 2, __FILE__, __LINE__ )
00071 endif
00072
00073 else
00074 call psmile_assert (__FILE__, __LINE__, &
00075 "called before prism_init_comp")
00076 endif
00077
00078
00079
00080
00081 #ifdef DEBUG
00082 PRINT *, ' PSMILE_IO_Init_pelist, id_comp_id = ', id_comp_id
00083 PRINT *, ' PSMILE_IO_Init_pelist, n_grids = ', Comps(id_comp_id)%n_grids
00084 PRINT *, ' PSMILE_IO_Init_pelist, Comps(id_comp_id)%size = ', Comps(id_comp_id)%size
00085 PRINT *, ' PSMILE_IO_Init_pelist, comp_info%Number_of_grids_vector(:)=',&
00086 comp_info%Number_of_grids_vector(:)
00087 #endif DEBUG
00088
00089
00090
00091 act_size = 0
00092 do i = 1, Comps(id_comp_id)%size
00093 if (comp_info%Number_of_grids_vector(i) .ne. 0 ) act_size = act_size + 1
00094 enddo
00095 print *, ' PSMILE_IO_Init_pelist -2- : act_size = ', act_size
00096
00097 allocate(IO_Comps_infos(id_comp_id)%pelist(1:act_size),STAT=ierror)
00098
00099
00100
00101
00102
00103
00104
00105 CALL psmile_io_derive_pelist(Appl%comm,id_comp_id, &
00106 comp_info, IO_Comps_infos(id_comp_id)%pelist,ierror)
00107
00108 #ifdef DEBUG
00109 print *, trim(ch_id), ': PSMILE_IO_Init_pelist : ', &
00110 'id_comp_id, IO_Comps_infos(id_comp_id)%pelist',id_comp_id, &
00111 ' : ',IO_Comps_infos(id_comp_id)%pelist
00112
00113 call psmile_flushstd
00114 print*,trim(ch_id), ': PSMILE_IO_Init_pelist : ' &
00115 ,'calling mpp_declare_pelist'
00116 call psmile_flushstd
00117 #endif
00118 CALL mpp_declare_pelist(IO_Comps_infos(id_comp_id)%pelist(1:act_size))
00119
00120 #ifdef DEBUG
00121 print *, trim(ch_id), ': PSMILE_IO_Init_pelist : after mpp_declare_pelist '
00122 call psmile_flushstd
00123 #endif
00124
00125 #ifdef VERBOSE
00126 print *, trim(ch_id), ': PSMILE_IO_Init_pelist : end'
00127
00128 call psmile_flushstd
00129 #endif /* VERBOSE */
00130
00131 #endif /* __PSMILE_WITH_IO */
00132
00133 end subroutine PSMILe_IO_Init_pelist