psmile_get_userdef_handle.F90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------
00002 ! Copyright 2006, C&C Research Laboratories, NEC Europe Ltd., St. Augustin, Germany.
00003 ! All rights reserved. Use is subject to OASIS4 license terms.
00004 !-----------------------------------------------------------------------
00005 !BOP
00006 !
00007 ! !ROUTINE: PSMILe_Get_userdef_handle
00008 !
00009 ! !INTERFACE:
00010 
00011       subroutine PSMILe_Get_userdef_handle (userdef_id, ierror)
00012 !
00013 ! !USES:
00014 !
00015       use PRISM_constants
00016       use PSMILe, dummy_interface => PSMILe_Get_userdef_handle
00017       implicit none
00018 !
00019 !
00020 ! !OUTPUT PARAMETERS:
00021 !
00022       integer, Intent (Out)               :: userdef_id
00023 
00024 !     Returns the handle to the userdef information created.
00025 
00026       integer, Intent (Out)               :: ierror
00027 
00028 !     Returns the error code of PRISM_Init;
00029 !             ierror = 0 : No error
00030 !             ierror > 0 : Severe error
00031 !
00032 !
00033 ! !LOCAL VARIABLES
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 ! !DESCRIPTION:
00044 !
00045 ! Subroutine "PSMILe_Get_userdef_handle" returns a handle to a userdef
00046 ! structure.
00047 !
00048 !
00049 ! !REVISION HISTORY:
00050 !
00051 !   Date      Programmer    Description
00052 ! ----------  -----------   -----------
00053 ! 21.10.09    J. Latour     created
00054 !
00055 !EOP
00056 !----------------------------------------------------------------------
00057 !
00058 ! $Id: psmile_get_userdef_handle.F90 1194 2009-10-21 09:10:21Z latour $
00059 ! $Author: Latour $
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 !   Initialization
00073 !
00074       ierror = 0
00075 !
00076 !   Search for a free userdef index
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 !   All Userdefs allocated are busy , then
00094 !   Allocate new Userdefs vector and copy old vector
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 !     Initialize further values of Userdefs
00120 !
00121          New_Userdefs(i)%ig_transi_side = PRISM_Undefined
00122          New_Userdefs(i)%ig_nb_links = 0
00123       enddo
00124 !
00125 !   De-allocate Userdefs vector
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 !   Update Number of Userdefs
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

Generated on 18 Mar 2011 for Oasis4 by  doxygen 1.6.1