• Non ci sono risultati.

Appendice A : File principali di gestione A1. function

N/A
N/A
Protected

Academic year: 2021

Condividi "Appendice A : File principali di gestione A1. function"

Copied!
12
0
0

Testo completo

(1)

Appendice A : File principali di gestione

A1. function manager.m

% file manager per la gestione delle GUI e delle function finalizzate % al loop di calcolo della vela.

function manager clear all close all %clc

global stop0 % =[] se non scelgo la cartella dove salvare i dati

global stop01 % =[] se non scelgo come importare la vela (matrice o file autometrix) global stop02 % =[] se chiudo la finestra_matrix senza importare le matrici

global stop1 % =[] se chiudo la finestra "1" senza importare il file autometrix

global stop2 % =[] se chiudo la finestra "2" senza scelte per interpolazione e iges

global stop3_0 % =[] se non si sceglie un modello per GAMBIT

global stop3_p % =[] se chiudo la finestra_predef_G senza scelte per l'editor di gambit global stop3_u % =[] se chiudo la finestra_utente_G senza scelte per l'editor di gambit

global stop4_0 % =[] se non si sceglie un modello per FLUENT

global stop4_p % =[] se chiudo la finestra_predef_F senza scelte per l'editor di fluent global stop4_u % =[] se chiudo la finestra_utente_F senza scelte per l'editor di fluent

global stop5 % =[] se chiudo la finestra scelta_metodo_strutt senza scelte accettabili global stop5_1 % =[] se chiudo la finestra_opzioni senza scelte dei vari parametri

global stop6 % =[] se chiudo la finestra_start senza procedere

global conta_scelta % numero delle vele caricate per il calcolo global ind_vele % contatore= 1:conta_scelte

global choice_g % contatore=[1;2;3] per attivare l'editor per il jornal di gambit global choice_f % contatore=[1;2;3] per attivare l'editor per il jornal di fluent global ind_loop % contatore delle iterazioni del ciclo LOOP principale

global ind_vele % contatore delle vele caricate

global stop_cfd % chiude il programma se errori in GAMBIT o FLUENT

global fid_choice % identificatore del file 'impostazioni' con le scelte fatte global fid_loop % identificatore del file 'loop_report'

global choice_cc global choice_scotta % inizializzazione stop0=1; stop01=1; stop02=1; stop1=1; stop2=1; stop3_0=1; stop3_p=1; stop3_u=1; stop4_0=1; stop4_p=1; stop4_u=1; stop5=1; stop5_1=1; stop6=1; stop_cfd=1; %--- %DICHIARAZIONE PATH DELLA CARTELLA 'LOOP'

%SCELTA DELLA CARTELLA DOVE SALVARE LA SESSIONE DI LAVORO, CON I DATI %DIVISI IN TANTE SOTTOCARTELLE QUANTE RISULTERANNO LE ITERAZIONI % %

%NECESSARIE AL LOOP DI CALCOLO PRINCIPALE

(2)

finestra0; % richiama la GUI

% ALL'APERTURA DELLA FINESTRA LA CASELLA EDIT6 RIPORTA % LA DIRECTORY CORRENTE

curr_dir=cd;

h_folder=findobj(gcf,'Tag','edit6'); set(h_folder,'String',curr_dir);

% ALL'APERTURA DELLA FINESTRA LA CASELLA EDIT7 RIPORTA % LA DIRECTORY DI DEFAULT PER LA SESSIONE DI LAVORO: % DIRECTORY CORRENTE \ OGGI

h_oggi=findobj(gcf,'Tag','edit7'); str_oggi=[curr_dir,'\oggi']; set(h_oggi,'String',str_oggi); %--- handle_f0=gcf; uiwait(handle_f0); %---

if isempty(stop0) % nessuna scelta, si interrompe il programma fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

return; % si interrompe il programma end

%--- % Si aggiorna il PATH di matlab, per avere accesso alle function

% raccolte in cartelle diverse da quella corrente.

add_path_loop; % cartelle con i file del programma e sessione di lavoro

% ogni volta che una sottocartella ITER# sara'creata % sara' aggiunta al path e salvata nella variabile LOOP_DIR % La stessa variabile sara' usata per rimuovere le

% directoty dal path di matlab al termine della sessione % di calcolo con "remove_path.m"

%--- % CICLO PER SCELTA ED IMPORTAZIONE DI UNA O PIU' VELE

conta_scelta=0; % inizializzazione

for iscelta=1:50

% SCELTA DEL METODO CON CUI IMPORTARE LA VELA

% OPZIONI: file autometrix oppure tre matrici X,Y,Z finestra01; % richiama la GUI

uiwait(gcf);

%---

% LA SCELTA DELLE MATRICI avviene in finestra_matrix % LA SCELTA DEL FILE AUTOMETRIX avviene in finestra1; % SE:

% nessuna scelta relativa al tipo di file da importare % nessuna scelta nella finestra_matrix

% nessuna scelta nella finestra1 (scelta file autometrix)

if isempty(stop01)|isempty(stop02)|isempty(stop1)

break % esce dal ciclo for per interrompere il programma end

% finestra per selezionare un'altra vela

prosegui=questdlg(' Si desidera aggiungere un''altra vela?',... ' Si desidera aggiungere un''altra vela?',... 'AGGIUNGERE','NON AGGIUNGERE',...

'NON AGGIUNGERE');

if strcmp(prosegui,'NON AGGIUNGERE')

break; % esce dal ciclo for/fine fase scelta vele end

end % fine ciclo 'for' per la scelta di una o piu' vele %---

if isempty(stop01)|isempty(stop02)|isempty(stop1) fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return; % rende efficace l'opzione INTERROMPI end

%--- load scelte_folder;

(3)

save([path_folder,'\conta_scelta'],'conta_scelta'); % variabile mat con numero vele per il caso corrente

%--- % SCELTE PER L'INTERPOLAZIONE DELLA SUPERFICIE E GENERAZIONE FILE IGES % si sceglie la dimensione dell'iges per ogni vela selezionata

for ind_vele=1:conta_scelta

finestra2; % richiama la GUI

% per gli aggiornamenti del nome vela sulla GUI, si veda il file % finestra2.m uiwait(gcf);

if isempty(stop2) % nessuna scelta per la fase di interpolazione. break % esce dal ciclo 'for' per interrompere il programma end

end %--- fine ciclo for per scelte strutturali relative ad ogni singola vela

if isempty(stop2)

fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return; % si interrompe il programma end

%--- % SCELTA DEL MODELLO PER GAMBIT

% opzioni: modello predefinito per 1 vela piccole def.; % grandi def. per 1 vela;

% modello qualsiasi;

% La variabile choice_g=[1;2;3] fara' attivare l'editor di file journal % relativo alla scelta fatta.

scegli_modello; % richiama la GUI uiwait(gcf);

if isempty(stop3_0) % nessuna scelta per il modello di journal fprintf(1,' IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,' IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return % si interrompe il programma end

%--- % OPZIONI DEL MODELLO DI JOURNAL SCELTO PER GAMBIT:

% finestre attivate dalla GUI precedente in funzione della scelta operata:

% "finestra _predef_G1" per l'uso del modello predefinito E DEF. PICCOLE con 1 vela % "finestra_predef_G2" per il modello predefinito E DEF. GRANDI con 1 vela

% "finestra_utente_G" per usare un journal qualsiasi scritto da un utente

% condizione che puo' arrivare da finestra_predef_G1/2 o % condizione che puo' arrivare da finestra_utente_G: if isempty(stop3_p)|isempty(stop3_u) % nessuna scelta fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return; % si interrompe il programma end

%--- % SCELTA DEL MODELLO PER FLUENT

if choice_g==1; choice_f=1; finestra_predef_f1; uiwait(gcf); elseif choice_g==2; choice_f=2; finestra_predef_f1; uiwait(gcf); elseif choice_g==3; choice_f=3; scelta_utente_f;

scegli_modello_f; % richiama la GUI uiwait(gcf);

end

if isempty(stop4_0) % nessuna scelta per il modello di journal fprintf(1,'\ IL PROGRAMMA E'' STATO INTERROTTO\n');

(4)

fprintf(fid_choice,'\ IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return % si interrompe il programma end

%--- % MODELLO PER FLUENT

% "finestra_predef_F" per l'uso del modello predefinito di journal

% "finestra_utente_F" per usare un journal qualsiasi scritto da un utente

% condizione che puo' arrivare da finestra_predef_F o % condizione che puo' arrivare da finestra_utente_F:

if isempty(stop4_p)|isempty(stop4_u) % nessuna scelta fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return; % si interrompe il programma end

%--- % SCELTE METODO DI CALCOLO PER LA DEFORMATA

% si esegue la scelta per ogni vela

for ind_vele=1:conta_scelta

scelta_metodo_strutt; % richiama la GUI uiwait(gcf);

if isempty(stop5) % nessuna scelta per il metodo

break % si esce dal ciclo for per la scelta end

end % fine FOR scelta metodo di calcolo

if isempty(stop5) % nessuna scelta per il metodo fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return % si interrompe il programma manager end

%--- % SCELTA OPZIONI METODO DI CALCOLO PER LA DEFORMATA

% condizione che puo' arrivare dalle finestre:

% finestra_aste_SQP, finestra_aste_SUMT, finestra_molle. if isempty(stop5_1) % nessuna scelta

fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return % si interrompe il programma end

%--- % FINESTRA START

% condizione che puo' arrivare dalla finestra_start: %

if isempty(stop6) % nessuna scelta

fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_choice,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

fclose(fid_choice);

return % si interrompe il programma end

%--- % chiusura del file con le impostazioni:

fid_choice=fclose(fid_choice);

%--- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ---INIZIO LOOP DI CALCOLO--- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

tempo_loop_INI=cputime; % istante di inizio ciclo LOOP

load scelte_start_loop; % input: max_iter_loop = iterazioni ammesse % toll_def = criterio con spostamento nodo

% toll_energia = criterio con l'energia/energia_iter1 % toll_iso = criterio analisi iso-u e iso-v

(5)

for ind_loop=1:max_iter_loop

tempo_iter_INI=cputime; % istante di inizio iterazione i-esima save('ind_loop','ind_loop'); % numero iterazione

save([path_folder,'\ind_loop'],'ind_loop'); % salva nella cartella sessione di lavoro

for ind_fid=[1,fid_loop]

fprintf(ind_fid,'\n ---\n');

fprintf(ind_fid,' --- ITERAZIONE %2.0f DEL LOOP DI CALCOLO ---\n',ind_loop); fprintf(ind_fid,' ---\n\n');

end

%--- % LETTURA GRIGLIA X,Y,Z DELLA VELA/VELE, INTERPOLAZIONE E GENERAZIONE IGES

for ind_vele=1:conta_scelta % operazioni ripetute per ogni vela

gestore_Sinterp;

end % fine ciclo FOR per caricare file.dat e generare i relativi IGES %--- % GENERAZIONE DEL FILE JOURNAL PER GAMBIT

% esistono tre opzioni:

% 1) modello predefinito per una vela. Ad ogni iterazione il file.m gambit_jornal_editor1.m

% crea un file journal, aggiornando la destinazione dei file DBS e MSH, salvati in ITER1, ITER2, etc.

% 2) modello predefinito per una vela con maggiori deformazioni (come al punto 1). % 3) lettura di un file journal "esterno", selezione delle righe con i path, riscrittura dei path

% aggiornati ad ogni iterazione medinate scansione del file originale e riscrittura dello stesso

% variabile "choice_g"=[1,2,3] rispettivamente nei casi relativi al punto 1,2,3 sopra descritti. if choice_g==1 gambit_journal_editor1; elseif choice_g==2 gambit_journal_editor3; else

fprintf(1,' opzione non disponibile. STOP PROGRAMMA\n'); fprintf(fid_loop,' opzione non disponibile. STOP PROGRAMMA\n'); remove_path_loop;

st_loop=fclose(fid_loop); fclose('all');

break; % si esce dal LOOP end

%--- % GENERAZIONE DEL FILE JOURNAL PER FLUENT

if choice_g==1

fluent_journal_editor1; elseif choice_g==2

fluent_journal_editor3; else

fprintf(1,' opzione non disponibile. STOP PROGRAMMA\n'); fprintf(fid_loop,' opzione non disponibile. STOP PROGRAMMA\n'); remove_path_loop;

st_loop=fclose(fid_loop); fclose('all');

break; % si esce dal LOOP end

%--- % ATTIVAZIONE GAMBIT E FLUENT

calcolo_CFD; % attiva Gambit;attiva Fluent;aspetta creazione file.dat

% possibile caso:

if isempty(stop_cfd) % errore in esecuzione di gambit o fluent;

% attivata la sez. CATCH di calcolo_CFD save('ind_loop','ind_loop'); % numero ultima iterazione

save([path_folder,'\ind_loop'],'ind_loop'); % nella cartella sessione di lavoro

fprintf(1,'\n IL PROGRAMMA E'' STATO INTERROTTO\n');

fprintf(fid_loop,'\n IL PROGRAMMA E'' STATO INTERROTTO\n'); remove_path_loop;

st_loop=fclose(fid_loop); fclose('all');

(6)

end

%--- % ATTIVAZIONE DEL CALCOLO DELLA DEFORMATA

% il calcolo si esegue per ogni vela:

% - il file strutturale carica i valori di pressione relativi alla vela % - si valutano i carichi sui nodi della griglia strutturale

% - si stima la deformata % - si salva la nuova griglia

for ind_vele=1:conta_scelta

attiva_analisi_strutt(ind_vele); end

%--- % CRITERIO DI CONVERGENZA DEL LOOP DI CALCOLO

if ind_loop>1 % criterio attivato solo dalla seconda iterazione

for ind_fid=[1,fid_loop]

fprintf(ind_fid,'\n ANALISI DEI CRITERI DI CONVERGENZA PER IL LOOP DI CALCOLO\n'); end for ind_vele=1:conta_scelta ans_criterio(ind_vele)=criterio_loop(ind_loop,ind_vele); end

% ans_criterio=1 SE il criterio e' soddisfatto per la vela i-esima % ans_criterio=0 SE il criterio non e' soddisfatto per la vela i-esima

test_ok=all(ans_criterio); % =1 se tutti i valori diversi da zero

if test_ok==1 % criterio di convergenza ok per ogni vela

% griglie strutturali finali trasformate in :

% 1) griglie iso-u/iso-v con dimensione uguale alle matrici vela importate % 2) matrici iso-u/iso-v con dimensione della griglia strutturale

for ind_vele=1:conta_scelta

elabora1(ind_vele,ind_loop,toll_iso); end

% operazioni di chiusura

tempo_loop_END=cputime; % istante di FINE ciclo LOOP

tempo_calcolo=tempo_loop_END-tempo_loop_INI; % tempo esecuzione ciclo loop tempo_iter_END=cputime; % istante fine iterazione

tempo_iter=tempo_iter_END-tempo_iter_INI; % durata iterazione

for ind_fid=[1,fid_loop]

fprintf(ind_fid,'\n IL LOOP DI CALCOLO HA RAGGIUNTO LA CONVERGENZA\n'); fprintf(ind_fid,' ITERAZIONI DEL CICLO LOOP UTILIZZATE: %3.0f\n',ind_loop); fprintf(ind_fid,' TEMPO DI CALCOLO ULTIMA ITERAZIONE : %4.1f

(min)\n',tempo_iter/60);

fprintf(ind_fid,' TEMPO DI CALCOLO TOTALE : %4.1f (min)\n',tempo_calcolo/60);

fprintf(ind_fid,' TERMINE LOOP DI CALCOLO: %s\n',datestr(now)); end

fprintf(fid_loop,'\n --- FINE DEL LOOP DI CALCOLO ---\n'); fprintf(fid_loop,'\n SE LA CARTELLA CORRENTE E'' LOOP_NVELE:\n');

fprintf(fid_loop,' DIGITARE ''POST_PROCESSING'' PER ANALIZZARE I RISULTATI\n'); fprintf(fid_loop,' ---\n');

save('ind_loop','ind_loop'); % numero ultima iterazione

save([path_folder,'\ind_loop'],'ind_loop'); % nella cartella sessione di lavoro %---

remove_path_loop; % cancella le cartelle di LOOP dal path di matlab st_loop=fclose(fid_loop);

fclose('all');

break; % esco da ciclo LOOP else % test non soddisfatto for ind_fid=[1,fid_loop]

fprintf(ind_fid,'\n CRITERIO DI CONVERGENZA DEL CICLO LOOP NON SODDISFATTO\n'); end

end % fine ciclo if test==ok end % fine ciclo if ind_loop>1

%--- % ESAURIMENTO ITERAZIONI A DISPOSIZIONE DEL LOOP PRINCIPALE

if ind_loop==max_iter_loop % esaurite le iterazioni per ind_loop

(7)

% griglie strutturali finali trasformate in :

% 1) griglie iso-u/iso-v con dimensione uguale alle matrici vela importate % 2) matrici iso-u/iso-v con dimensione della griglia strutturale

for ind_vele=1:conta_scelta

elabora1(ind_vele,ind_loop,toll_iso); end

% operazioni di chiusura

tempo_loop_END=cputime; % istante di FINE ciclo LOOP

tempo_calcolo=tempo_loop_END-tempo_loop_INI; % tempo esecuzione ciclo loop tempo_iter_END=cputime; % istante fine iterazione

tempo_iter=tempo_iter_END-tempo_iter_INI; % durata iterazione

for ind_fid=[1,fid_loop]

fprintf(ind_fid,'\n IL LOOP DI CALCOLO HA ESAURITO IL NUMERO DI ITERAZIONI AMMESSE = %3.0f\n\n',max_iter_loop);

fprintf(ind_fid,' TEMPO DI CALCOLO ULTIMA ITERAZIONE : %4.1f (min)\n',tempo_iter/60);

fprintf(ind_fid,' TEMPO DI CALCOLO TOTALE : %4.1f (min)\n',tempo_calcolo/60);

fprintf(ind_fid,' TERMINE LOOP DI CALCOLO: %s\n',datestr(now)); end

fprintf(fid_loop,'\n --- LOOP DI CALCOLO TERMINATO ---\n'); fprintf(fid_loop,'\n SE LA CARTELLA CORRENTE E'' LOOP_NVELE:\n');

fprintf(fid_loop,' DIGITARE ''post_processing'' PER ANALIZZARE I RISULTATI\n'); fprintf(fid_loop,' ---\n');

remove_path_loop; % esclude le cartelle di LOOP dal path di matlab st_loop=fclose(fid_loop);

fclose('all'); % si chiudono tutti i file in w/r save('ind_loop','ind_loop'); % numero ultima iterazione

save([path_folder,'\ind_loop'],'ind_loop'); % nella cartella sessione di lavoro break; % esco dal ciclo LOOP

end

%--- % SE I CRITERI NON SONO SODDISFATTI SI PREPARA L'ITERAZIONE SUCCESSIVA: %--- pause(15); % per osservare i plot della vela

close all; % chiude i plot della griglia

%--- % CREAZIONE CARTELLA PER I DATI DELLA ITERAZIONE SUCCESSIVA

% ( ed aggiornamento del path di matlab)

[path_sub_folder]=crea_sub_cartella(ind_loop+1); % crea ed aggiorna il path

%--- % RIELABORAZIONE GRIGLIA_NEW PER RISPETTARE LA CONDIZIONE LINEE ISO-U E ISO-V % E SALVATAGGIO GRIGLIA NELLA CARTELLA ITER(ind_loop+1) COME

% INPUT PER L'ITERAZIONE SUCCESSIVA

fprintf(1,'\n INIZIO ELABORAZIONE ISO-U E ISO-V\n');

for ind_vele=1:conta_scelta

elabora2(ind_vele,ind_loop,toll_iso); end

fprintf(1,'\n FINE ELABORAZIONE ISO-U E ISO-V\n');

%--- % se criteri di convergenza non soddisfatti e iterazioni ancora disponibili tempo_iter_END=cputime;

tempo_iter=tempo_iter_END-tempo_iter_INI; % durata iterazione

for ind_fid=[1,fid_loop]

fprintf(ind_fid,'\n TEMPO DI CALCOLO ITERAZIONE %s : %4.1f (min)\n',num2str(ind_loop),tempo_iter/60);

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end % --- FINE CICLO FOR PER IL LOOP DI CALCOLO --- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fclose('all');

%--- fprintf(1,'\n --- LOOP DI CALCOLO TERMINATO ---\n'); fprintf(1,' SE LA CARTELLA CORRENTE E'' LOOP_NVELE:\n');

fprintf(1,' DIGITARE ''post_processing'' PER ANALIZZARE I RISULTATI\n'); fprintf(1,' ---\n');

(8)

A.2. function calcolo_CFD.m

function calcolo_CFD

global ind_loop

global stop_cfd

global conta_scelta

global fid_loop

%---

try,

% APERTURA FINESTRA DI SICUREZZA

finestra_pausa_fluent;

% ATTIVAZIONE GAMBIT ( genera mesh )

load path_jou_g;

% str_g=['statog=dos(''gambit -id gambit_it',num2str(ind_loop),...

% ' -init ',path_jou_g,' -new'');'];

fprintf(1,'\n INIZIO SESSIONE DI GAMBIT\n');

fprintf(fid_loop,'\n INIZIO SESSIONE DI GAMBIT\n');

str_g=['! gambit id gambit_it',num2str(ind_loop),' init ',path_jou_g,'

-new'];

eval(str_g); % lancia gambit

fprintf(1,'\n SESSIONE DI GAMBIT CONCLUSA\n');

fprintf(fid_loop,'\n SESSIONE DI GAMBIT CONCLUSA\n');

if isempty(stop_cfd) % condizione che puo' arrivare dalla gui

return;

end

%---

% ATTIVAZIONE FLUENT

fprintf(1,'\n PAUSA DI 60 SEC\n');

fprintf(fid_loop,'\n PAUSA DI 60 SEC\n');

pause(60); % attesa per dare tempo a gambit di chiudersi completamente

% ed evitare sovrapposizione con la licenza di fluent

if isempty(stop_cfd) % condizione che puo' arrivare dalla gui

return;

end

load path_jou_f;

% str_f=['dos(''fluent 3d -i ',path_jou_f,''')']; %alternativa

tempo_flu_INI=cputime; % istante apertura fluent

fprintf(1,'\n INIZIO SESSIONE DI FLUENT\n');

fprintf(fid_loop,'\n INIZIO SESSIONE DI FLUENT\n');

str_f=['! fluent 3d -i ',path_jou_f];

eval(str_f); % lancia fluent

if isempty(stop_cfd) % condizione che puo' arrivare dalla gui

return;

end

(9)

for ind_vela=1:conta_scelta

if isempty(stop_cfd) %b condizione che puo' arrivare dalla gui

break;

end

% METODOLOGIA APPLICATA AI FILE.DAT DI OGNI SINGOLA VELA

load(['scelte_vela',num2str(ind_vela)]); % sigla_vela

load scelte_folder % path_loop e path_folder

% .dat da creare con pressioni di "vela'

nome_tabella=['tabella_',sigla_vela,'_it',num2str(ind_loop),'.dat'];

path_tabella=[path_folder,'\ITER',num2str(ind_loop),'\',nome_tabella];

% .dat con pressioni di vela_shadow

nome_tab_shadow=['tabella_',sigla_vela,'_shad_it',num2str(ind_loop),'.dat'

];

path_tab_shadow=[path_folder,'\ITER',num2str(ind_loop),'\',nome_tab_shadow

];

cosa_fare1=0; % decisioni

cosa_fare2=0;

cont_tab0=0; % contatori per il numero di righe del file

cont_tabsh0=0; % aperto in lettura/scrittura

cont_delta0=1; % contatori per stabilire se la condizione

imposta

cont_deltash0=1; % e' soddisfatta due volte consecutive

cont_display=1;

%---CICLO WHILE ---

% ciclo WHILE in cui si vincola Matlab fino alla scrittura e

chiusura

% dei file dat scritti da Fluent con i valori delle pressioni

while 1

% INTERRUTTORE DA GUI finestra_pausa_fluent

if isempty(stop_cfd) %b condizione che puo' arrivare dalla

gui

break;

end

%---

% CASO DELLA SCRITTURA DEL FILE TABELLA_VELA

%---

if cosa_fare1==0

% apertura del file tabella vela in lettura

fid_tab=fopen(path_tabella,'rt');

if fid_tab==-1 % non posso aprirlo; file non esiste

cosa_fare1=0;

pause(15); % inutile proseguire subito/non e'

necessario chiudere

(10)

elseif fid_tab>0 % file aperto (durante,dopo la

scrittura di fluent)

% DURANTE\DOPO la scrittura di fluent

% i due casi DURANTE\DOPO si distinguono

%leggendo se il numero di righe del file varia

if cont_display==1

fprintf(1,'\n SALVATAGGIO DATI IN CORSO PER VELA %s\n',sigla_vela);

fprintf(fid_loop,'\n SALVATAGGIO DATI IN CORSO PER VELA %s\n',sigla_vela);

cont_display=cont_display+1;

end

cont_tab=0;

while 1

tline=fgetl(fid_tab);

% stringa = riga i-esima del file letto

if ~ischar(tline)

% quando trova la fine del file tline=-1

break

end

cont_tab=cont_tab+1; % numero righe lette

end

delta_tab=cont_tab-cont_tab0;

% variazione numero di righe

if (delta_tab==0)&(cont_tab>1)

% DOPO che fluent ha terminato di scrivere

% si verifica che non sia un caso:

if cont_delta0==1

cosa_fare1=0;

% si verifica che alla iter. successiva sia delta=0

cont_delta0=cont_delta0+1;

else

cosa_fare1=1;

end

else

% DURANTE la scrittura del file da parte di fluent

cont_delta0=1;

cosa_fare1=0;

cont_tab0=cont_tab;

end

end

end

%---fine ciclo if cosa_fare1---

% INTERRUTTORE

if isempty(stop_cfd)

%b condizione che puo' arrivare dalla gui

break;

end

%---

% CASO DELLA SCRITTURA DEL FILE TABELLA_VELA_SHADOW

%---

if (cosa_fare1==1)&(cosa_fare2==0)

(11)

% attivato solo se il primo caso soddisfatto

% apertura del file tabella vela_shadow in lettura

fid_tabsh=fopen(path_tab_shadow,'rt');

if fid_tabsh==-1 % non posso aprirlo; file non esiste

cosa_fare2=0;

pause(15);

% inutile proseguire subito/ non necessario chiudere

elseif fid_tabsh>0

% file aperto (durante,dopo la scrittura di fluent)

% DURANTE\DOPO la scrittura di fluent

% i due casi DURANTE\DOPO si distinguono

% leggendo se

% il numero di righe del file varia

cont_tabsh=0;

while 1

tlinesh=fgetl(fid_tabsh);

% stringa = riga i-esima del file letto

if ~ischar(tlinesh)

% quando trova la fine del file tline=-1

break

end

cont_tabsh=cont_tabsh+1; % numero righe lette

end

delta_tabsh=cont_tabsh-cont_tabsh0;

% variazione numero righe

if (delta_tabsh==0)&(cont_tabsh>1)

% DOPO che fluent ha terminato di scrivere

% si verifica che non sia un caso:

if cont_deltash0==1

% delta_tabsh=0 la prima volta

cosa_fare2=0 ;

cont_deltash0=cont_deltash0+1;

else

% delta_tabsh=0 due volte consecutive

cosa_fare2=1; % escludo il ciclo while

end

else

% DURANTE la scrittura del file da parte di fluent

cont_deltash0=1;

% se delta_tabsh0 diverso da zero inizializzo

% il contatore

cosa_fare2=0;

cont_tabsh0=cont_tabsh;

end

end

end

% ---fine ciclo if cosa_fare2---

if (cosa_fare1==1)&(cosa_fare2==1) % file completati

break; % si esce dal ciclo WHILE

end

(12)

% INTERRUTTORE

if isempty(stop_cfd)

%b condizione che puo' arrivare dalla gui

break;

end

pause(15); % pausa per dare tempo a fluent di aggiornare alcune righe

end % --- fine ciclo WHILE---

fclose(fid_tab);

fclose(fid_tabsh);

fprintf(1,'\n FINE SALVATAGGIO DATI PER VELA %s\n',sigla_vela);

fprintf(fid_loop,'\n FINE SALVATAGGIO DATI PER VELA

%s\n',sigla_vela);

close; % chiude la GUI finestra_pausa_fluent

end %--- ---FINE CICLO FOR ---

tempo_flu_END=cputime; % istante apertura fluent

tempo_flu=tempo_flu_END-tempo_flu_INI;

% durata sessione di fluent

for ind_fid=[1,fid_loop]

fprintf(ind_fid,'\n SESSIONE DI FLUENT CONCLUSA: DURATA %5.2f

(min)\n',(tempo_flu/60));

end

%---

catch,

fprintf(1,' PROBLEMI CON GAMBIT O FLUENT - PROGRAMMA CHIUSO');

fprintf(fid_loop,' PROBLEMI CON GAMBIT O FLUENT - PROGRAMMA CHIUSO');

fprintf(fid_loop,' TERMINE LOOP DI CALCOLO: %s\n',datestr(now));

stop_cfd=[];

close; % chiude la GUI finestra_pausa_fluent

end

Riferimenti

Documenti correlati

Film cofinanziato da: Fondazione TERA, Zanichelli editore, Istituto Nazionale di Fisica Nucleare, Dipartimento di Fisica della Sapienza Università di Roma. Patrocinio di:

La seconda parte del capitolo tratta il passaggio, avvenuto nel 1942, dalla gestione degli Immobili a quella del neonato Ente Teatrale Italiano (ETI), in seguito alla quale il

La questione che smuove il governo italiano e l’opinione pubblica in merito all’invasione dei migranti clandestini, non riguarda puramente tali dati o la mancanza di solidarietà da

Starting from some premises on the hybridism of ruins, based on Simmel's essay “The Ruin”, in which he defines this element as a hybrid suspended between art and nature, I propose

Given the different propensity of women and men to guess, and given that closed ended items are more likely to incite guessing than open ended items (Luskin and Bullock 2011),

Tipicamente questo file .zip conterrà parte del materiale dell’esercitazione (es. file .h con dichiarazioni di classi) e materiale necessario all’esecuzione di test di conformità con

incontro per i genitori degli studenti della scuola media incontri per i genitori degli studenti della scuola media. incontri per i genitori degli studenti della

ARCHIVIO.C Il secondo programma deve gestire un archivio di persone che vengono memorizzate in un file INI diviso in due sezioni: nella prima sezione, “Struttura” , c’è un