# Code Snippets

Here I start posting some quick blog posts that include code snippets. These are my developed codes, are very helpful for developing new applications. To use them in your projects, studies etc.

The following operation

`pts = rand(10,3)-[1,2,3];`

translates in Matlab’s earlier editions (< 2016) to

`pts = bsxfun(@minus,rand(10,3),[1,2,3]);`

The paper

• Fadakar-A Y, Dowd P.A, Xu C, 2014, Connectivity Field: A Measure for Characterising Fracture Networks. Journal of Mathematical Geosciences, DOI: 10.1007/s11004-014-9520-7.

provides a comprehensive study on connectivity of DFN models. It covers traditional lattice (pixel) based connectivity evaluations, clustering; furthermore, proposes a novel fully developed method for analyzing connectivity of DFN models that preserves its properties after down- or up-scaling, that is an scalable measure.

Sample codes of Connectivity Field can be found in ADFNE1.0.

TIPS: Use the search box above (top-right) to search for “CF”, “Connectivity Field”, etc.

Indeed, it is quite easy to adapt them to work with new standards in ADFNE1.5. It remains however the user’s task to do so, for now.

Anyway, for simpler and quick evaluations the following example demonstrates intersection analysis, cluster analysis and pipe model all within ADFNE1.5.

`addpath('ADFNE15'); Globals;rng(1234567890); % for reproducibility purposeset1 = Field(DFN('dim',3,'n',150,'dir',15,'ddir',-1e9,'minl',0.15,...'mu',0.3,'maxl',0.5,'bbx',[0,0,0,1,1,1],'dip',45,'ddip',-1e7),'Poly');set2 = Field(DFN('dim',3,'n',150,'dir',210,'ddir',-1e9,'minl',0.05,...'mu',0.1,'maxl',0.5,'bbx',[0,0,0,1,1,0.5],'dip',45,'ddip',-1e7,...'shape','e','q',4),'Poly');fnm = [set1;set2];Draw('ply',fnm);%% Connectivity Analysisswitch 1case 1 % Intersection -> Cluster% Intersection Analysis[xts,ids,La] = Intersect(fnm);% Cluster Analysisswitch 2case 1 % method 1% Cluster LabelsLa = Relabel(La);% Members of Largest Clusteridx = (La == max(La));% Visualizeclf;Draw(fnm(~idx),'fc','none','axes',false);Draw(fnm(idx),'fc','r','axes',false);Axes;case 2 % method 2% Clustersclu = Cluster(ids);% Size of Clusterscln = cellfun(@numel,clu);% Largest Cluster[~,idx] = max(cln);cmx = clu{idx};% Visualizeclf;Draw(fnm(Not(1:size(fnm,1),cmx)),'fc','none','axes',false);Draw(fnm(cmx),'fc','r','axes',false);Axes;endcase 2 % Pipe% Boundary Elementsbe = {Poly.Left+[0.05,0,0];Poly.Right-[0.05,0,0]};% Pipe -> Backboneo = Field(CPipe(be,fnm).Backbone,'dfn');La = o.dfn.Label(3:end);plb = o.pip.Label(o.bbn.B);lbl = plb(1);% Backbone Linesbbn = o.bbn.Backbone;% Visualizeclf;subplot(211);Draw(fnm(La == lbl),'fc','r','fa',1,'axes',false);Draw(be,'fa',0.2);subplot(212);Draw(fnm(La ~= lbl),'fc','none','ec',[0.7,0.7,0.7],'axes',false);Draw(be,'fa',0.2);Draw(bbn);end`

In some Matlab editions some functions are missing, either they have been removed entirely or replaced with some others. Anyway, here I list simple solutions for some as for your convenience while using ADFNE1.5 package.

Note that some of them are already included in the folder R2015a in the package. Anyway, to use them copy paste each into a separate file named exactly as the function name (*.m) and put them inside the folder R2015a.

###### contains.m
`function b = contains(s,p)b = ~isempty(strfind(s,p));`
`function s = pad(s,n,side)switch sidecase 'left's = [repelem(' ',1,n),s];end`
`function tgt = setstructfields(tgt,upd)names = fieldnames(upd);for i = 1:numel(names)tgt.(names{i}) = upd.(names{i});end`