psmile_get_userdef_handle.F90
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 subroutine PSMILe_Get_userdef_handle (userdef_id, ierror)
00012
00013
00014
00015 use PRISM_constants
00016 use PSMILe, dummy_interface => PSMILe_Get_userdef_handle
00017 implicit none
00018
00019
00020
00021
00022 integer, Intent (Out) :: userdef_id
00023
00024
00025
00026 integer, Intent (Out) :: ierror
00027
00028
00029
00030
00031
00032
00033
00034
00035 integer :: i, new_dim
00036
00037 integer, parameter :: nerrp = 2
00038 integer :: ierrp (nerrp)
00039
00040 type (Userdef), Dimension(:), Pointer :: New_Userdefs
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061 Character(len=len_cvs_string), save :: mycvs =
00062 '$Id: psmile_get_userdef_handle.F90 1194 2009-10-21 09:07:12Z redler $'
00063
00064
00065
00066 #ifdef VERBOSE
00067 print *, trim(ch_id), ': PSMILe_Get_userdef_handle: start'
00068 call PSMILe_Flushstd
00069 #endif /* VERBOSE */
00070
00071
00072
00073
00074 ierror = 0
00075
00076
00077
00078 do i = 1, Number_of_Userdefs_allocated
00079 if (Userdefs(i)%status == PSMILe_status_free) exit
00080 end do
00081
00082 if (i <= Number_of_Userdefs_allocated) then
00083 userdef_id = i
00084 Userdefs(userdef_id)%status = PSMILe_status_defined
00085
00086 #ifdef VERBOSE
00087 print *, TRIM(ch_id),': PSMILe_Get_userdef_handle: eof = ',userdef_id,ierror
00088 call PSMILe_Flushstd
00089 #endif /*VERBOSE */
00090 return
00091 endif
00092
00093
00094
00095
00096 new_dim = Number_of_Userdefs_allocated + 8
00097
00098 Allocate (New_Userdefs (new_dim), STAT = ierror)
00099 if (ierror > 0) then
00100 ierrp (1) = ierror
00101 ierrp (2) = new_dim
00102 ierror = PRISM_Error_Alloc
00103
00104 call PSMILe_Error ( ierror, 'New_Fields', &
00105 ierrp, 2, __FILE__, __LINE__ )
00106 return
00107 endif
00108
00109 New_Userdefs (1:Number_of_Userdefs_allocated) = &
00110 Userdefs (1:Number_of_Userdefs_allocated)
00111
00112 New_Userdefs(Number_of_Userdefs_allocated+1:new_dim)%status = &
00113 PSMILe_status_free
00114
00115 do i = Number_of_Userdefs_allocated+1, new_dim
00116 Nullify ( New_Userdefs(i)%dga_wght )
00117 Nullify ( New_Userdefs(i)%iga_igl )
00118
00119
00120
00121 New_Userdefs(i)%ig_transi_side = PRISM_Undefined
00122 New_Userdefs(i)%ig_nb_links = 0
00123 enddo
00124
00125
00126
00127 Deallocate (Userdefs, STAT = ierror)
00128 if (ierror > 0) then
00129 ierrp (1) = ierror
00130 ierror = PRISM_Error_Dealloc
00131
00132 call PSMILe_Error ( ierror, 'Userdefs', &
00133 ierrp, 1, __FILE__, __LINE__ )
00134 return
00135 endif
00136
00137
00138
00139 Userdefs => New_Userdefs
00140
00141 userdef_id = Number_of_Userdefs_allocated + 1
00142 Number_of_Userdefs_allocated = new_dim
00143
00144 Userdefs(userdef_id)%status = PSMILe_status_defined
00145
00146 #ifdef VERBOSE
00147 print *, TRIM(ch_id),': PSMILe_Get_userdef_handle: eof = ',userdef_id,ierror
00148 call PSMILe_Flushstd
00149 #endif /*VERBOSE */
00150
00151 return
00152
00153 end subroutine PSMILe_Get_userdef_handle